﻿using System;
using System.Collections.Generic;
using System.Linq;

using System.Web.UI;
using DevExpress.XtraGrid;
using Capa_Entidad;
using Negocio.Clases_BL;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
public partial class Ventas_wfProgramacion : System.Web.UI.Page
{
    //private bool validarInsercion = false;
    private static string vOperacion = "C";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            vOperacion = (String)Session["Operacion"];
        }

    }
    protected void ASPxButton1_Click(object sender, EventArgs e) 
    {
        
        //Util MESS = new Util();
       // Util.showmsgconfirmacion("hOLA ESTO ES UNA PRUEBA",  );
        try
        {
            if (validarInsercion() == true)
            {
                if (dgHorarioMedico.VisibleRowCount == 0)
                {
                    //Util.showmsg("No hay informacion disponible!!!", this.Page);
                    lblMensaje.Text = "No hay informacion disponible!!!";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                    return;
                }

                clsPrm_Programacion_MedicaBL BL_Programacion_Medica_Val = new clsPrm_Programacion_MedicaBL();

                //Validaciones
                DateTime fecha_progVal = dtpFechaInicio.Date;
                while (fecha_progVal.Date <= dtpFechaFin.Date)
                {

                    // Int32 j = 0;
                    // dgHorarioMedico.Selection.Count;

                    List<Object> selectItemsval = dgHorarioMedico.GetSelectedFieldValues("HOR_ID");
                    Int32 reg = dgHorarioMedico.VisibleRowCount;
                    if (selectItemsval.Count == 0)
                    {
                        //Util.showmsg("seleccione un horario!!!", this.Page);
                        lblMensaje.Text = "seleccione un horario!!!";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                        return;
                    }
                    foreach (object selectItemId in selectItemsval)
                    //while (j <= dgHorarioMedico.VisibleRowCount - 1)
                    {
                        var consulta = from P in BL_Programacion_Medica_Val.listar()
                                       where P.TUR_ID == Convert.ToInt32(cboTurno.SelectedItem.Value) && P.CON_ID_CONSULTORIO == Convert.ToInt32(cboConsultorio.SelectedItem.Value)
                                       && P.PRM_FECHA.Equals(fecha_progVal)
                                       select P;
                        // Int32 k = 0;
                        foreach (var S in consulta)
                        {
                            if (S.HOR_ID == (Int32)selectItemId)
                            {
                                //Util.showmsg("El Horario ya esta asignado. Por favor Cambie Horario o Turno", this.Page);
                                lblMensaje.Text = "El Horario ya esta asignado. Por favor Cambie Horario o Turno";
                                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                                return;
                            }
                            //  k++;
                        }
                        //  j++;
                    }
                    fecha_progVal = fecha_progVal.AddDays(1);
                }

                DateTime fecha_prog = dtpFechaInicio.Date;
                while (fecha_prog.Date <= dtpFechaFin.Date)
                {
                    //Int32 i = 0;

                    List<Object> selectItems = dgHorarioMedico.GetSelectedFieldValues("HOR_ID");
                    foreach (object selectItemId in selectItems)
                    //while(i<=dgHorarioMedico.VisibleRowCount-1)
                    {

                        PRM_PROGRAMACION_MEDICA Ent_Programacion_Medica = new PRM_PROGRAMACION_MEDICA();
                        clsPrm_Programacion_MedicaBL BL_Programacion_Medica = new clsPrm_Programacion_MedicaBL();
                        if (vOperacion == "C")
                        {
                            Ent_Programacion_Medica.PRM_ID_PROGRAMACION = (Convert.ToInt32(BL_Programacion_Medica.UltimoNumero()) + 1).ToString("0000000000");
                        }
                        else
                        {
                            Ent_Programacion_Medica.PRM_ID_PROGRAMACION = (String)Session["ID_Prog"];
                        }
                        Ent_Programacion_Medica.PRM_FECHA = fecha_prog;
                        Ent_Programacion_Medica.PRM_DESCRIPCION = txtDescripcion.Text;
                        Ent_Programacion_Medica.DEPH_ID_DEPARTAMENTO = int.Parse(cboDepartamento.Value.ToString());
                        Ent_Programacion_Medica.TIP_ID_TIPO = int.Parse(cboTipoProgramacion.Value.ToString());
                        Ent_Programacion_Medica.ESTG_ID_ESTADO = 1;
                        Ent_Programacion_Medica.TUR_ID = int.Parse(cboTurno.Value.ToString());
                        Ent_Programacion_Medica.MED_ID_MEDICO = int.Parse(cboMedico.Value.ToString());
                        Ent_Programacion_Medica.TIS_ID_TIPO = int.Parse(cboTipoServicio.Value.ToString());
                        Ent_Programacion_Medica.CON_ID_CONSULTORIO = int.Parse(cboConsultorio.Value.ToString());
                        Ent_Programacion_Medica.HOR_ID = (Int32)selectItemId;
                        if (vOperacion == "C")
                        {
                            if (BL_Programacion_Medica.Insertar(Ent_Programacion_Medica) == true)
                            {
                                // Response.Redirect("wfProgramacionListado.aspx", true);
                            }
                            else
                            {
                                //Util.showmsg("Error: No se Pudo agregar regsitro!!!", this.Page);
                                lblMensaje.Text = "Error: No se Pudo agregar regsitro!!!";
                                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                            }
                        }
                        else
                        {
                            if (BL_Programacion_Medica.Modicar(Ent_Programacion_Medica) == true)
                            {
                                //Util.showmsgconfirmacion("Programacion Medica modificada!!!", this.Page);
                                lblMensaje.Text = "Programacion Medica modificada!!!";
                                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                                // Response.Redirect("wfProgramacionListado.aspx", true);
                            }
                            else
                            {
                                //Util.showmsg("Error: No se Pudo agregar regsitro!!!", this.Page);
                                lblMensaje.Text = "Error: No se Pudo agregar regsitro!!!";
                                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                            }
                        }

                        // i++;
                        //Thread.SpinWait(i);
                    }
                    fecha_prog = fecha_prog.AddDays(1);
                }

                //Util.showmsg("Programacion Medica Realizada Correctamente!!!", this.Page);
                lblMensaje.Text = "Programacion Medica Realizada Correctamente!!!";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
            }        
        }
        catch (Exception ex)
        {
            string script = string.Format("alert('{0}');", ex.Message);
            ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta error", script, true); 
        }
                     
    
    }
    private bool validarInsercion()
    {
        bool Bool = true;

        if (cboTipoProgramacion.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione un Tipo de Programación", this.Page);
            lblMensaje.Text = "Seleccione un Tipo de Programación";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboTipoServicio.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione un Tipo de Servicio", this.Page);
            lblMensaje.Text = "Seleccione un Tipo de Servicio";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboDepartamento.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione un Departamento", this.Page);
            lblMensaje.Text = "Seleccione un Departamento";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboEspecialidad.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione una Especialidad", this.Page);
            lblMensaje.Text = "Seleccione una Especialidad";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboMedico.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione un Médico", this.Page);
            lblMensaje.Text = "Seleccione un Médico";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboConsultorio.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione un Consultorio", this.Page);
            lblMensaje.Text = "Seleccione un Consultorio";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (dtpFechaInicio.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione una Fecha de Inicio", this.Page);
            lblMensaje.Text = "Seleccione una Fecha de Inicio";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (dtpFechaFin.Value == null)
        {
            Bool = false;
            //Util.showmsg("Seleccione una Fecha de Fin", this.Page);
            lblMensaje.Text = "Seleccione una Fecha de Fin";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
        else if (cboTurno.Value == null)
        {
            Bool = false;
            //Util.showmsg("Selecccione un Turno", this.Page);
            lblMensaje.Text = "Selecccione un Turno";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }
     
        return Bool;
    }
    
    
    
    protected void ASPxButton2_Click(object sender, EventArgs e)
    {
        Response.Redirect("wfProgramacionListado.aspx", true);
    }
    public void Cargar_Grid_Horario()
    {
        dgHorarioMedico.Selection.UnselectAll();
        dgHorarioMedico.DataSource = null;
        dgHorarioMedico.DataBind();
        Negocio.cnDB Conex = new Negocio.cnDB();
        SqlConnection cn = new SqlConnection();
        Conex.ConexBD(cn);
        //cn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI");
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter("select * from  PRM_HORARIO where TUR_ID=" + cboTurno.SelectedItem.Value, cn);
        SqlCommandBuilder cmdBldr = new SqlCommandBuilder(da);
        da.Fill(ds, "PRM_HORARIO");
        dgHorarioMedico.DataSource = ds;
        dgHorarioMedico.DataMember = "PRM_HORARIO";
        dgHorarioMedico.DataBind();
        if (dgHorarioMedico.VisibleRowCount == 0)
        {
            //Util.showmsg("No Existe Horario!!!", this.Page);
            lblMensaje.Text = "No Existe Horario!!!";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
        }

    }


    protected void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
    {
        ObjectDataSource2.SelectParameters.Clear();
        ObjectDataSource2.SelectParameters.Add("ID",Convert.ToString(cboDepartamento.SelectedItem.Value));
        ObjectDataSource2.SelectMethod = "listarFiltro";
        ObjectDataSource2.Select();
        ObjectDataSource2.DataBind();
    }
    protected void cboTurno_SelectedIndexChanged(object sender, EventArgs e)
    {
        Cargar_Grid_Horario();
    }
    protected void cboEspecialidad_SelectedIndexChanged(object sender, EventArgs e)
    {
        ObjectDataSource3.SelectParameters.Clear();
        ObjectDataSource3.SelectParameters.Add("ID_Especialidad", Convert.ToString(cboEspecialidad.SelectedItem.Value));
        ObjectDataSource3.SelectMethod = "listar_Medico_Filtro";
        ObjectDataSource3.Select();
        ObjectDataSource3.DataBind();

        ObjectDataSource7.SelectParameters.Clear();
        ObjectDataSource7.SelectParameters.Add("ID", Convert.ToString(cboEspecialidad.SelectedItem.Value));
        ObjectDataSource7.SelectMethod = "listarFiltro";
        ObjectDataSource7.Select();
        ObjectDataSource7.DataBind();

    }
    protected void dtpFechaFin_DateChanged(object sender, EventArgs e)
    {

    }
}